/* eslint-disable no-tabs */
/* eslint-disable no-extend-native */
/**
* 日期格式化
* YYYY | yyyy	表示年份
* MM  			表示月份
* DD | dd 		表示日期
* HH | hh  	    表示时间
* mm 			表示分钟
* SS | ss		表示秒钟
*/
;
Date.prototype.format = function (formatStr) {
  var str = formatStr || 'yyyy-MM-dd HH:mm:ss'
  str = str.replace(/YYYY|yyyy/, this.getFullYear())
  var month = this.getMonth() + 1
  str = str.replace(/MM/, month > 9 ? '' + month : '0' + month)
  str = str.replace(/DD|dd/, this.getDate() > 9 ? '' + this.getDate() : '0' + this.getDate())
  str = str.replace(/HH|hh/, this.getHours() > 9 ? '' + this.getHours() : '0' + this.getHours())
  str = str.replace(/mm/, this.getMinutes() > 9 ? '' + this.getMinutes() : '0' + this.getMinutes())
  str = str.replace(/ss|SS/, this.getSeconds() > 9 ? '' + this.getSeconds() : '0' + this.getSeconds())
  return str
}

/**
* 转化为 YYYY-MM-DD HH:mm:SS格式
*/
Date.prototype.toString = function () {
  return this.format('YYYY-MM-DD HH:mm:SS')
}

/**
 * 获取一天开始时间</br>
 * @return Date 时间对象
 */
Date.prototype.floor = function () {
  var dateStr = this.format('YYYY-MM-DD')
  return new Date(new Date(dateStr).getTime() - 28800000) // 8 * 60 * 60 * 100 = 28800000
}

/**
 * 获取一天最后时间</br>
 * @return Date 时间对象
 */
Date.prototype.ceil = function () {
  // 加一天取开始时间，再减一毫秒为当天最后时间
  this.setDate(this.getDate() + 1)
  return new Date(this.floor().getTime() - 1)
}

/**
 * 获取某月第一天第一毫秒
 */
Date.prototype.getFirstMsecOfMonth = function () {
  var startdate = new Date(this.getTime())
  startdate.setDate(1)
  return startdate.floor().getTime()
}

/**
 * 获取某月最后一天最后一毫秒
 */
Date.prototype.getLastMsecOfMonth = function () {
  var endDate = new Date(this.getTime())
  var month = endDate.getMonth()
  var nextMonth = ++month
  var nextMonthFirstDay = new Date(endDate.getFullYear(), nextMonth, 1)
  var oneDay = 1000 * 60 * 60 * 24
  return new Date(nextMonthFirstDay - oneDay).ceil().getTime()
}
